package com.dream.technology.service;

import com.dream.technology.db.entity.*;
import com.dream.technology.db.entity.vo.VoFlow;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface RcFlowService {

    int countByExample(RcFlowQuery example);

    int deleteByExample(RcFlowQuery example);

    int deleteByPrimaryKey(Long id);

    int insert(RcFlow record);

    /**
     * json 数据 包含 item
     *
     * @param record
     * @return
     */
    String insertStr(VoFlow record);

    int insertSelective(RcFlow record);

    List<RcFlow> selectByExample(RcFlowQuery example);

    RcFlow selectByPrimaryKey(Long id);

    int updateByExampleSelective(@Param("record") RcFlow record, @Param("example") RcFlowQuery example);

    int updateByExample(@Param("record") RcFlow record, @Param("example") RcFlowQuery example);

    int updateByPrimaryKeySelective(RcFlow record);

    int updateByPrimaryKey(RcFlow record);


    /**
     * 输入 ale|cd&(jke|iuy)   返回 期数等于7 | 期数等于14 &（性别等同于男）。。。。
     *
     * @param flowExp
     * @return
     */
    String checkFlow(VoFlow flowExp);

    List<RcFlow> queryFlowByTag(int childItemType, Long customerTag);


    /**
     * 复制流程
     *
     * @param id
     * @param tagName
     * @param tagCode
     * @param enabled
     * @return
     */
    String copy(Long id, String flowName, String flowDetail, Boolean enabled);


    /**
     * 修改风控流程 包含流程配置项
     *
     * @param jsonStr
     * @return
     */
    String updateByJsonStr(VoFlow jsonStr);


    /**
     * 查询流程子项中的子项id
     *
     * @return
     */
    List<Long> getChildIdsByFlowId(Long id, String type);

    /**
     * 查询子流程流程子项中的子项id
     *
     * @return
     */
    List<Long> getChildIdsByFlowIds(List<Long> id, String type);


    /**
     * 查询流程子项中的用户标签
     *
     * @return
     */
    List<RcCustomerTag> getTagByFlowId(Long id);


    /**
     * 查询流程子项中的规则
     *
     * @return
     */
    List<RcRule> getRuleByFlowId(Long id);


    /**
     * 查询流程子项中的规则集
     *
     * @return
     */
    List<RcRuleCollection> getRuleCollectionByFlowId(Long id);

    int add(RcFlow record);

    /**
     * 根据type获取用户标签、规则、规则集
     *
     * @param childItemType 流程中的各项类型 0:用户标签 1：规则 2：规则集
     * @return
     */
    Map<String, Object> getAllChildItem(Integer childItemType);

    /**
     * 根据平台名称 ，获取风控流程id
     *
     * @param
     * @return
     */
    public RcFlow getFlowByPlatform(String productId);

    /**
     * 根据平台名称 ，获取风控流程id api获取
     *
     * @param platform
     * @return
     */
    public RcFlow getFlowByPlatformApi(Long platform);

}
